package com.cty.advice;

//事务的环绕回滚

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Component
@Aspect
/*
*
* 环绕事务会获得一个ProceedingJoinPoint的对象
* 该对象的两个功能:执行目标方法或者获得目标方法的信息
*
*
* */
public class TxAroundAdvice {

    @Around("com.cty.pointcut.MyPc.pc()")
    public Object tx(ProceedingJoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        Object result = null;
        //执行目标方法，参数:目标方法的形参
        try {
            //在这里写方法的增强
            System.out.println("事务开启");
            //执行目标方法并返回其生成的返回值
            result = joinPoint.proceed(args);
            System.out.println("事务提交");
        } catch (Throwable e) {
            System.out.println("事务回滚");
            throw new RuntimeException(e);
        }
        return result;
    }
}
